数据集
使用的数据信为gcookhook
包中的数据,如下所示:
|
|
数据如下:
|
|
基本散点图
用到的函数是geom_point()
,默认为黑色圆点:
|
|
数据如下所示:
|
|
改变形状
在geom_point()参数中加入shape=21,改为圆点:
|
|
改变大小
在geom_point()参数中加入size=2,将原来的点扩大2倍:
|
|
还可以改变点的其它属性:其它属性包括点形(shape),颜色(colour)。
分组
以颜色分组
把根据性别(sex)进行分组,用不同的颜色把不同性别表示出来:
|
|
绘图:
|
|
用形状分组
用不同的形状把不同性别表示出来:
|
|
用形状和颜色两个图形属性同时分组
|
|
用内置的函数进行形状与颜色的设置
|
|
使用不同于默认设置的点型
使用参数geom_point()中的shape=可以设置不同的点型:
|
|
用scale_shape_manual()来修饰点型
|
|
满足某一条的绘图
下面以heightweight数据集为例,在数据集中增加一个用来标识儿童体重是否超过100磅的列:
|
|
最终数据如下所示:
|
|
上一段代码中,将hw中的weightLb的数据分开,区间是负无穷(-Inf)到100,100到正无穷(Inf),将分割的结果给weightGroup,其标签为”< 100”, “>=100”
绘图:
|
|
用连续型变量映射到点的颜色或大小属性上
把体重映射到颜色上:
|
|
把体重映射到大小上
|
|
精确绘图控制
连续型图例
将数值最小值的用黑色表示,数值最高的是白色表示,scale_fill_gradient()
用以控制颜色的渐变,这样图例是连续型的:
|
|
离散型图例
下面的图例是离散的:
|
|
避开重复的点
|
|
图形重复问题
先看一个案例:
|
|
上面例子中,点比较多有54000个,有重叠的部分。但可以通过调节点的透明度进行调节:
透明度为0.1:
|
|
另外一种解决数据点重叠的方法
将数据点进行分箱(bin),并以矩形来表示,同时将数据点的密度映射为矩形 填充色,stat_bin2d()的功能在于将数据进行分箱,默认的是把每个坐标轴上对应的点分30个箱子,即把数据集分为900个箱子如下所示:
|
|
分箱数据的进一步优化:
stat_bin2d(bins=52)可以把每个坐标轴的数据点分为52个箱子,如下所示:
|
|
分箱数据形状的改变:
默认的分箱形状是正方形,可以换一下:
|
|
上图的图例是连续型变量,现在改为离散型变量:
|
|
x轴是离散型变量
|
|
上图所示,x轴上的Time是因子型变量,映射到y轴上的点有重复,现在添加geom_point(position=”jitter”)可以添加一定的扰动,避开重复:
|
|
对振动的程度,也可以进行修饰,width是水平方向的扰动,height是垂直方向上的扰动:
|
|
箱线图
如果x轴是因子型变量,y轴是连续型变量,则用箱线图比较合适:
|
|
添加回归模型拟合线
基本绘图
用stat_smooth()添加置信域,默认的是95%,如下所示:
|
|
用stat_smooth(method=lm, levels=0.99)可以对置信域进行修改:
|
|
去掉置信区间
|
|
置信区间的颜色设置
将点改为灰色,如下所示:
|
|
置信区间的其他拟合方式:
|
|
loess拟合,如下所示:
|
|
Logistics回归
数据集
|
|
数据如下所示:
|
|
绘图:
|
|
有分组变量的的散点图拟合
|
|
基于数据集对拟合线进行外推:
此时需要添加fullrange=TRUE
参数,如下所示:
|
向已有散点图添加拟合曲线
|
|
计算结果如下所示:
|
|
定义函数绘制拟合曲线
定义predictvals()函数可以简化向散点图添加模型拟合线的过程。使用时,只需要向其传递一个模型作为参数,该函数就会自动查询变量名、预测变量范围、并返回一个包含预测变量和模型预测值的数据框。将该数据框传递给geom_line()函数,即可绘制出模型拟合线:
|
|
调用lm()函数与loess()函数可以对数据集建立线性模型和LOESS模型:
|
|
针对两个模型分别调用predictvals()函数,并将得到的结果(数据框)传递给geom_line():
|
|
另外一个案例:
|
|
添加来自多个模型的拟合线
|
|
查看数据:
|
|
绘图:
|
|
上图中男性的数据点(即m颜色的点)终止于年龄最大点,女性的数据点(即f的颜色点)终止于女性组中年龄的最大点,为了使两组预测线对应的x轴范围与整个数据集的范围相同,可以向其传递一个xrange参数:
|
|
向散点图中添加模型系数
如果需要向拟合曲线中添加系数,则如下所示:
|
|
结果如下所示:
|
|
由分析结果可知,模型的R^2=0.4249,则可以用annotate()函数将其添加到曲线上:
|
|
如果不想使用纯文本字符串当注释的话,可以通过设置parse=TRUE调用R的数学表达式来输入公式:
|
|
添加公式
|
|
向散点图添加边际地毯
用到的函数是geom_rug(),以faithful数据集为例说明:
|
|
绘图:
|
|
添加扰动,避免重叠
上图中的waiting中的边际地毯线有重叠的(虽然看起来很稀疏,其实都重叠在了一起),因此通过向边际地毯线的位置坐标添加扰动并设定size减少线宽可以减轻边际地毯线的重叠程度。如下所示:
|
|
向散点图添加标签
用annotate()可以向数据点中添加标签,以countries数据集为例说明,如下所示:
|
|
数据如下:
|
|
绘图:
|
|
如果要向每一个数据点添加标签,如下所示:
|
|
对数据点的标签进行微调
vjust=0时,标签文本的基线会与数据点对齐,设定vjust=1时,标签文本的顶部会与数据点对齐。
|
|
添加y的取值
也可以添加y的映射来进行微调
|
|
左对齐
添加参数hjust=0,如下所示:
|
|
右对齐
添加参数hjust=1,如下所示:
|
|
有针对性的增加标签
如果只想给为个别数据点添加标签,但希望R自动设定标签位置的话,可以给数据框增加一个只包含拟使用的标签的新列。一个可行的方案是:首先,将所用数据复制一个副本,并将Name复制为Name1
|
|
注意%in%
的功能,此符号的功能是如下所示:
|
|
可以看出,%in%的功能是在x中查找y,如果有则为TRUE,若无则为FALSE。
气泡图
气泡图的每个面积正比于变量值
|
|
如果想要把数据点的值映射给面积,用到的函数是scale_size_area()
|
|
其他用法
当x轴与y轴都为分类变量时,气泡图可以用来表示风格点上的变量值,如下所示:
|
|
绘制散点矩阵图
|
|
上面的绘图没有使用ggplot2,是因为它不能绘制散点图矩阵(至少绘制的效果不佳),上述绘图过得也可以使用自定义的面板函数,现在我们定义一个panel.cor
函数来展示变量两两之间的相关系数,以代替默认的散点图。相关系数较大的位置将对应较大的字符,如下所示:
|
|
为了在面板的对角线上展示各个变量的直方图,我们再定义一个panel.hist
函数,如下所示:
|
|
上面的函数都源于pairs
函数的帮助页面,可以直接复制这个函数的相关代码,定义了这些函数后,我们哦可以高骼它来绘制散点图矩阵。令pairs()
函数在面板的上三角执行panel.cor
函数,在面板的对角线执行panel.hist
函数,在绘图时也添加了一些东西,在面板的下三角执行panel.smooth
函数,这个函数将在散点图矩阵的下三角绘制散点图,并添加一个LOWESS平滑曲线,如下所示:
|
|
也许我们希望用线性模型来代替LOWESS模型,panel.lm
函数可以完成该操作,如下所示:
|
|
这次系统默认的线条颜色不再是红色,而是黑色,调用函数pairs()
时(与函数panel.smooth配合使用),设定col.smooth参数可以对线条颜色进行修改,为了便于辩认数据点,我们在图中使用更小的点,该操作可以通过pch="."
来实现,如下所示:
|
|
cex参数可以控制图中点的大小,cex参数的默认值是1,其值越大,数据点越大,但如果cex小于0.5,那么图形输出为PDF文件时可能无法很好地渲染。
GGally包的ggpairs函数
使用GGally包的ggpairs函数也能绘制散点矩阵图,如下所示:
|
|
参考资料
- 常肖楠, 邓一硕, 魏太云. R数据可视化手册[M]. 人民邮电出版社, 2014.